package com.bzkj.basicinfo.utils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @author C1309
 * @ClassName DataBatchProcessorUtil
 * @description: TODO 数据批次处理工具
 * @date 2023年10月11日
 * @version: 1.0
 */
public class DataBatchProcessorUtil {
    /**
     * 对给定的数据列表进行批次处理
     *
     * @param dataList 待处理的数据列表
     * @return 处理后的批次数据列表
     */
    public static <T> List<List<T>> process(List<T> dataList, Integer batchSize) {
        // 获取数据总数
        int totalDataCount = dataList.size();
        // 根据每批数量计算批次数
        int batches = (int) Math.ceil((double) totalDataCount / batchSize);
        ArrayList<List<T>> list = new ArrayList<>();
        for (int i = 0; i < batches; i++) {
            int startIdx = i * batchSize;
            int endIdx = Math.min((i + 1) * batchSize, totalDataCount);
            List<T> batchData = dataList.subList(startIdx, endIdx);
            list.add(batchData);
        }
        return list;
    }

    /**
     * 获取查询时间段
     *
     * @param flag 是否定时调用（false：登录调用查询返回当天时间段，true：定时任务调用查询返回前一天时间段）
     * @return 查询时间段
     */
    public static HashMap<String, String> getSearchDate(boolean flag) {
        HashMap<String, String> dateMap = new HashMap<>();
        // 获取昨天日期
        LocalDate flagDate;
        if (flag) {
            flagDate = LocalDate.now().minusDays(1);
        } else {
            flagDate = LocalDate.now();
        }

        // 一天的开始时间 (00:00:00)
        LocalDateTime startOfDay = flagDate.atStartOfDay();

        // 一天的结束时间 (23:59:59)
        LocalDateTime endOfDay = flagDate.atTime(LocalTime.MAX);

        // 定义格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        dateMap.put("startTimeStr", startOfDay.format(formatter));
        dateMap.put("endTimeStr", endOfDay.format(formatter));
        return dateMap;
    }

}

